package 树;

public class Leedcode101对称二叉树 {
    public boolean isSymmetric(TreeNode root) {
        if(root == null){
            return true;
        }
        return isMrror(root.left,root.right);
    }

    /**
     * 传入两个节点，就可以判断这两个子树是否对称
     * @param t1
     * @param t2
     * @return
     */
    private boolean isMrror(TreeNode t1, TreeNode t2) {
        //t1 t2 都为空，那么只有一个根节点，那么一定是对称的
        if (t1 == null && t2 == null){
            return true;
        }
        //如果两个树的高度不一致那么一定是不对称的
        if (t1 == null && t2 != null){
            return false;
        }
        if (t2 == null && t1 != null){
            return false;
        }
        //走到这里，说明存在两个节点并且t1,t2在结构是对称的，比较他们的值，然后将他们的子树交给一个可以判断是否对称的方法来执行
        return t1.val == t2.val && isMrror(t1.left,t2.right) && isMrror(t1.right,t2.left);
    }
}
